package cn.byapps.hw.controller;

import cn.byapps.hw.entity.Clazz;
import cn.byapps.hw.service.ClazzService;
import cn.byapps.hw.vo.ClazzVO;
import cn.byapps.hw.vo.VueData;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * ClazzController
 */
@RestController
@RequestMapping("/api/clazz")
@Slf4j
public class ClazzController {

    @Resource
    private ClazzService clazzService;

    @GetMapping
    public VueData<ClazzVO> getList(Integer pos, Integer rows, Integer clazzId) {
        int total = 0;
        List<ClazzVO> clazzes = new ArrayList<>();
        if (clazzId == null) {
            total = clazzService.total();
            clazzes = clazzService.findVO(pos, rows);
        } else {
            total = clazzService.total(clazzId);
            clazzes = clazzService.findVO(pos, rows, clazzId);
        }
        VueData<ClazzVO> vue = new VueData<>(clazzes, total);
        return vue;
    }

    @PostMapping
    public VueData<ClazzVO> add(@RequestBody Clazz clazz) {
        clazzService.add(clazz);
        VueData<ClazzVO> vue = new VueData<>();
        return vue;
    }

    @DeleteMapping("/deletestudent")
    public VueData<ClazzVO> deleteByStudent(String studentId, Integer clazzId) {
        clazzService.deleteStudentById(studentId, clazzId);
        VueData<ClazzVO> vue = new VueData<>();
        return vue;
    }

    @DeleteMapping("/deletecourse")
    public VueData<ClazzVO> deleteByStudent(Integer courseId, Integer clazzId) {
        clazzService.deleteCourseById(courseId, clazzId);
        VueData<ClazzVO> vue = new VueData<>();
        return vue;
    }

    @DeleteMapping
    public VueData<ClazzVO> delete(Integer id) {
        log.info("id = " + id);
        clazzService.deleteById(id);
        VueData<ClazzVO> vue = new VueData<>();
        return vue;
    }

    @PutMapping
    public VueData<ClazzVO> update(@RequestBody Clazz clazz) {
        clazzService.update(clazz);
        VueData<ClazzVO> vue = new VueData<>();
        return vue;
    }

}